from django.http import HttpResponse
from django.shortcuts import render


# 表单
def search_form(request):
    return render(request, 'search_form.html')


"""
响应对象主要有三种形式：HttpResponse()、render()、redirect()。
HttpResponse(): 
    返回文本，参数为字符串，字符串中写文本内容。
    如果参数为字符串里含有 html 标签，也可以渲染,如下：
    return HttpResponse("<a href='https://www.runoob.com/'>菜鸟教程</a>")
        
render(): 
    返回文本，
    第一个参数为 request，
    第二个参数为字符串（页面名称），
    第三个参数为字典（可选参数，向页面传递的参数：键为页面参数名，值为views参数名）。
    
redirect()：
    重定向，跳转新页面。参数为字符串，字符串中填写页面路径。
    一般用于 form 表单提交后，跳转到新页面，实例如下：
    return redirect("/index/")

render 和 redirect 是在 HttpResponse 的基础上进行了封装：
render：     底层返回的是 HttpResponse 对象
redirect：   底层继承的是 HttpResponse 对象

"""


def search_get(request):
    """
    接收get请求数据
    """
    request.encoding = 'utf-8'
    if 'q' in request.GET and request.GET['q']:
        # request.GET['q'] 同 request.GET.get("q")
        message = '你搜索的内容为: ' + request.GET['q']
    else:
        message = '你提交了空表单'
    return HttpResponse('返回内容为[{}]'.format(message))


def search_post(request):
    """
    接收POST请求数据
    """
    ctx = {}
    if request.POST:
        # request.POST['q'] 同 request.POST.get("q")
        ctx['rlt'] = request.POST.get("q")

    # 获取当前请求的方式，数据类型是字符串，且结果为大写
    if request.method == 'GET':
        ctx['method'] = 'GET'
    elif request.method == 'POST':
        ctx['method'] = 'POST'

    # 获取请求全路径
    ctx['full_path'] = request.get_full_path

    # body:数据类型是二进制字节流，是原生请求体里的参数内容，在HTTP中用于POST，因为GET没有请求体。
    # 在HTTP中不常用，而在处理非HTTP形式的报文时非常有用，例如：二进制图片、XML、Json 等。
    name = request.body
    print(name)

    # 获取 URL 中的路径部分，数据类型是字符串
    name = request.path
    print(name)

    return render(request, "post.html", ctx)

"""
常见问题：post 请求返回 403

原因：
    当采用客户端向 django 服务器提交 post 请求时，会得到403，权限异常。
    因为 django 针对提交的请求，有校验。

解决方法：
    导入模块：
    from django.views.decorators.csrf import csrf_exempt
    在函数前面添加修饰器：
    @csrf_exempt
"""
